--- /net80211/ieee80211_wireless.c (revision 3080)
+++ /net80211/ieee80211_wireless.c (revision 3811)
@@ -1552,4 +1552,5 @@
 struct iwscanreq {		/* XXX: right place for this declaration? */
 	struct ieee80211vap *vap;
+	struct iw_request_info *info;
 	char *current_ev;
 	char *end_buf;
@@ -1557,4 +1558,11 @@
 };
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) && !defined(IW_REQUEST_FLAG_COMPAT)
+#define	iwe_stream_add_event(a, b, c, d, e)	iwe_stream_add_event(b, c, d, e)
+#define	iwe_stream_add_point(a, b, c, d, e)	iwe_stream_add_point(b, c, d, e)
+#define	iwe_stream_add_value(a, b, c, d, e, f)	\
+	iwe_stream_add_value(b, c, d, e, f)
+#define	iwe_stream_lcp_len(a)			IW_EV_LCP_LEN
+#endif
 static int
 giwscan_cb(void *arg, const struct ieee80211_scan_entry *se)
@@ -1591,5 +1599,6 @@
 	else
 		IEEE80211_ADDR_COPY(iwe.u.ap_addr.sa_data, se->se_bssid);
-	current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_ADDR_LEN);
+	current_ev = iwe_stream_add_event(req->info, current_ev, end_buf,
+					&iwe, IW_EV_ADDR_LEN);
 
 	/* We ran out of space in the buffer. */
@@ -1604,9 +1613,9 @@
 		iwe.u.data.length = vap->iv_des_nssid > 0 ?
 			vap->iv_des_ssid[0].len : 0;
-		current_ev = iwe_stream_add_point(current_ev,
+		current_ev = iwe_stream_add_point(req->info, current_ev,
 			end_buf, &iwe, vap->iv_des_ssid[0].ssid);
 	} else {
 		iwe.u.data.length = se->se_ssid[1];
-		current_ev = iwe_stream_add_point(current_ev,
+		current_ev = iwe_stream_add_point(req->info, current_ev,
 			end_buf, &iwe, (char *) se->se_ssid+2);
 	}
@@ -1622,6 +1631,6 @@
 		iwe.u.mode = se->se_capinfo & IEEE80211_CAPINFO_ESS ?
 			IW_MODE_MASTER : IW_MODE_ADHOC;
-		current_ev = iwe_stream_add_event(current_ev,
-			end_buf, &iwe, IW_EV_UINT_LEN);
+		current_ev = iwe_stream_add_event(req->info, current_ev,
+				end_buf, &iwe, IW_EV_UINT_LEN);
 
 		/* We ran out of space in the buffer. */
@@ -1635,6 +1644,6 @@
 	iwe.u.freq.m = se->se_chan->ic_freq * 100000;
 	iwe.u.freq.e = 1;
-	current_ev = iwe_stream_add_event(current_ev,
-		end_buf, &iwe, IW_EV_FREQ_LEN);
+	current_ev = iwe_stream_add_event(req->info, current_ev,
+			end_buf, &iwe, IW_EV_FREQ_LEN);
 
 	/* We ran out of space in the buffer. */
@@ -1646,6 +1655,6 @@
 	iwe.cmd = IWEVQUAL;
 	set_quality(&iwe.u.qual, se->se_rssi, ATH_DEFAULT_NOISE);
-	current_ev = iwe_stream_add_event(current_ev,
-		end_buf, &iwe, IW_EV_QUAL_LEN);
+	current_ev = iwe_stream_add_event(req->info, current_ev,
+			end_buf, &iwe, IW_EV_QUAL_LEN);
 
 	/* We ran out of space in the buffer */
@@ -1661,5 +1670,6 @@
 		iwe.u.data.flags = IW_ENCODE_DISABLED;
 	iwe.u.data.length = 0;
-	current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, "");
+	current_ev = iwe_stream_add_point(req->info, current_ev,
+					end_buf, &iwe, "");
 
 	/* We ran out of space in the buffer. */
@@ -1670,5 +1680,5 @@
 	last_ev = current_ev;
 	iwe.cmd = SIOCGIWRATE;
-	current_val = current_ev + IW_EV_LCP_LEN;
+	current_val = current_ev + iwe_stream_lcp_len(req->info);
 	/* NB: not sorted, does it matter? */
 	for (j = 0; j < se->se_rates[1]; j++) {
@@ -1676,7 +1686,7 @@
 		if (r != 0) {
 			iwe.u.bitrate.value = r * (1000000 / 2);
-			current_val = iwe_stream_add_value(current_ev,
-				current_val, end_buf, &iwe,
-				IW_EV_PARAM_LEN);
+			current_val = iwe_stream_add_value(req->info,
+					current_ev, current_val, end_buf,
+					&iwe, IW_EV_PARAM_LEN);
 		}
 	}
@@ -1685,11 +1695,11 @@
 		if (r != 0) {
 			iwe.u.bitrate.value = r * (1000000 / 2);
-			current_val = iwe_stream_add_value(current_ev,
-				current_val, end_buf, &iwe,
-				IW_EV_PARAM_LEN);
+			current_val = iwe_stream_add_value(req->info,
+					current_ev, current_val, end_buf,
+					&iwe, IW_EV_PARAM_LEN);
 		}
 	}
 	/* remove fixed header if no rates were added */
-	if ((current_val - current_ev) > IW_EV_LCP_LEN) {
+	if ((current_val - current_ev) > iwe_stream_lcp_len(req->info)) {
 		current_ev = current_val;
 	} else {
@@ -1705,5 +1715,6 @@
 	snprintf(buf, sizeof(buf), "bcn_int=%d", se->se_intval);
 	iwe.u.data.length = strlen(buf);
-	current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, buf);
+	current_ev = iwe_stream_add_point(req->info, current_ev,
+					end_buf, &iwe, buf);
 
 	/* We ran out of space in the buffer. */
@@ -1729,6 +1740,6 @@
 #endif
 		if (iwe.u.data.length != 0) {
-			current_ev = iwe_stream_add_point(current_ev, end_buf,
-				&iwe, buf);
+			current_ev = iwe_stream_add_point(req->info,
+					current_ev, end_buf, &iwe, buf);
 			
 			/* We ran out of space in the buffer */
@@ -1755,6 +1766,6 @@
 #endif
 		if (iwe.u.data.length != 0) {
-			current_ev = iwe_stream_add_point(current_ev, end_buf,
-				&iwe, buf);
+			current_ev = iwe_stream_add_point(req->info,
+					current_ev, end_buf, &iwe, buf);
 			
 			/* We ran out of space in the buffer. */
@@ -1774,6 +1785,6 @@
 			wme_leader, sizeof(wme_leader) - 1);
 		if (iwe.u.data.length != 0) {
-			current_ev = iwe_stream_add_point(current_ev, end_buf,
-				&iwe, buf);
+			current_ev = iwe_stream_add_point(req->info,
+					current_ev, end_buf, &iwe, buf);
 
 			/* We ran out of space in the buffer. */
@@ -1792,6 +1803,6 @@
 			ath_leader, sizeof(ath_leader) - 1);
 		if (iwe.u.data.length != 0) {
-			current_ev = iwe_stream_add_point(current_ev, end_buf,
-				&iwe, buf);
+			current_ev = iwe_stream_add_point(req->info,
+					current_ev, end_buf, &iwe, buf);
 
 			/* We ran out of space in the buffer. */
@@ -1816,4 +1827,5 @@
 
 	req.vap = vap;
+	req.info = info;
 	req.current_ev = extra;
 	if (data->length == 0) {
